import when from '../ThirdParty/when.js';
import Check from './Check.js';
import defaultValue from './defaultValue.js';
import defined from './defined.js';
import Resource from './Resource.js';

    /**
     * @private
     */
    function loadImageFromTypedArray(options) {
        var uint8Array = options.uint8Array;
        var format = options.format;
        var request = options.request;
        var flipY = defaultValue(options.flipY, false);
        //>>includeStart('debug', pragmas.debug);
        Check.typeOf.object('uint8Array', uint8Array);
        Check.typeOf.string('format', format);
        //>>includeEnd('debug');

        var blob = new Blob([uint8Array], {
            type : format
        });

        var blobUrl;
        return Resource.supportsImageBitmapOptions()
            .then(function(result) {
                if (result) {
                    return when(Resource.createImageBitmapFromBlob(blob, {
                        flipY: flipY,
                        premultiplyAlpha: false
                    }));
                }

                blobUrl = window.URL.createObjectURL(blob);
                var resource = new Resource({
                    url: blobUrl,
                    request: request
                });

                return resource.fetchImage({
                    flipY : flipY
                });
            })
            .then(function(result) {
                if (defined(blobUrl)) {
                    window.URL.revokeObjectURL(blobUrl);
                }
                return result;
            })
            .otherwise(function(error) {
                if (defined(blobUrl)) {
                    window.URL.revokeObjectURL(blobUrl);
                }
                return when.reject(error);
            });
    }
export default loadImageFromTypedArray;
